package com.zy.reflect.dtproxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * @Author Gong
 * @Description
 * @dATE 2021/12/21 10:52
 **/
public class MyInvokeHandler implements InvocationHandler {
    // 实现了接口的代理类的对象的声明
    private Object obj;
    MyInvokeHandler(Object obj){
        this.obj = obj;
    }
    //该方法有两个作用： ① 给被代理的对象实例化 ② 返回一个代理类对象
//    public void blink(Object obj) {
//        this.obj = obj;
//
////        Object proxy = Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
////        return  proxy;
//    }
    // 当通过代理类的对象发起对被重写的方法的调用的时，都会转化为对如下的invoke的方法的作用
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("---我是执行前----");  //自己控制 AOP (spring)

        Object returnVal = method.invoke(obj, args);//你写了核心业务逻辑

        System.out.println("---我是执行后----");//自己控制

        return returnVal;
    }
}
